RTC I2C DS1307 Real Time Clock Module

  • RM15.00

  • Product Code: RTC I2C DS1307
  • Availability: In Stock

This Arduino Tiny RTC I2C module incorporates the DS1307 I2C real time clock IC and the 24C32 32K I2C EEPROM storage. What's more, it has a DS18B20 temperature sensor on board. All of this in a tiny package of 25mm x 28mm x 8.4mm. It comes with a LIR2303 rechargeable lithium battery, and a charging circuit is included in the module. When the temperature sensor is off, the RTC module can run for 1 year on a single charge.

 

This module is used for applications such as datalogging, timing applications ex. turning on the sprinkers at 4pm in the evenings. Since the module is self powered the time data is maintained even if the Arduino is powered off, allowing for building low power systems which can run for a long span of time without change of batteries.

 

                                                                             

Pinout:

PIN Description Comment

BAT

Battery voltage To monitor the battery voltage, or not connected
GND Ground Ground
VCC 5V Power the module and charge the battery
SDA I2C data I2C data for the RTC
SCL I2C clock I2C clock for the RTC
DS DS18B20 Temp Sensor Output One wire interface
SQ Square wave output Normally not used

The I2C wires "SDA" and "SCL" are the data line and clock line, they should be connected to the corresponding pins depending on the Arduino board.

 

Board  I2C / TWI pins

Uno, Ethernet  A4 (SDA), A5 (SCL)

Mega2560  20 (SDA), 21 (SCL)

Leonardo  2 (SDA), 3 (SCL)

Due  20 (SDA), 21 (SCL), SDA1, SCL1

 

Interfacing RTC I2C Real Time Clock Pinout with Arduino

                                                                          

Code:

#include <Wire.h>

#include <TimeLib.h>

#include <DS1307RTC.h>


const char *monthName[12] = {

  "Jan", "Feb", "Mar", "Apr", "May", "Jun",

  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"

};


tmElements_t tm;


void setup() {

  bool parse=false;

  bool config=false;


  // get the date and time the compiler was run

  if (getDate(__DATE__) && getTime(__TIME__)) {

    parse = true;

    // and configure the RTC with this info

    if (RTC.write(tm)) {

      config = true;

    }

  }


  Serial.begin(9600);

  while (!Serial) ; // wait for Arduino Serial Monitor

  delay(200);

  if (parse && config) {

    Serial.print("DS1307 configured Time=");

    Serial.print(__TIME__);

    Serial.print(", Date=");

    Serial.println(__DATE__);

  } else if (parse) {

    Serial.println("DS1307 Communication Error :-{");

    Serial.println("Please check your circuitry");

  } else {

    Serial.print("Could not parse info from the compiler, Time=\"");

    Serial.print(__TIME__);

    Serial.print("\", Date=\"");

    Serial.print(__DATE__);

    Serial.println("\"");

  }

}


void loop() {

}


bool getTime(const char *str)

{

  int Hour, Min, Sec;


  if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;

  tm.Hour = Hour;

  tm.Minute = Min;

  tm.Second = Sec;

  return true;

}


bool getDate(const char *str)

{

  char Month[12];

  int Day, Year;

  uint8_t monthIndex;


  if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;

  for (monthIndex = 0; monthIndex < 12; monthIndex++) {

    if (strcmp(Month, monthName[monthIndex]) == 0) break;

  }

  if (monthIndex >= 12) return false;

  tm.Day = Day;

  tm.Month = monthIndex + 1;

  tm.Year = CalendarYrToTm(Year);

  return true;

}

Write a review

Note: HTML is not translated!
    Bad           Good